package com.easy.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easy.bean.Address;
import com.easy.bean.User;
import com.easy.common.CommonResult;
import com.easy.dao.IUserDao;
import com.easy.sercive.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserDao iUserDao;  // 直接注入 DAO 层

    // 修改头像

    // 修改密码


    //查询 vip和普通用户
    @GetMapping("/roleall/{roleId}")
    public CommonResult getVIPIUser(@PathVariable int roleId) {
        // 使用 MyBatis Plus 的 selectList 方法获取所有用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("is_del", 0);  // 只查询未删除的用户
        wrapper.eq("role_id",roleId);
        wrapper.orderByDesc("id");   // 倒序排列

        List<User> user = iUserDao.selectList(wrapper);
        List<User> list = iUserDao.selectList(wrapper);
        return CommonResult.success(list,user.size());
    }

    //修改vip和普通用户 的roel_id 权限 如果role_id 为1修改成2   为2修改成1
    @PutMapping("/editrole/{id}")
    public CommonResult editRoleId(@PathVariable int id){
        // 查找指定用户
        User user = iUserDao.selectById(id);
        if(user == null) {
            return CommonResult.fail("用户不存在");
        }
        // 修改用户权限信息
        if(user.getRoleId()==1){
            user.setRoleId(2);
        }else if(user.getRoleId() == 2){
            user.setRoleId(1);
        }else {
            return CommonResult.fail("不支持的 role_id 的值");
        }
        // 更新用户信息
        int result = iUserDao.updateById(user);
        if(result >0){
            return CommonResult.success("角色权限更新成功");
        }else {
            return CommonResult.success("角色权限更新失败");

        }
    }


    @GetMapping("/{id}")
    public CommonResult getUserById(@PathVariable int id) {
        // 使用 MyBatis Plus 的 selectById 方法根据 ID 获取用户
        User user = iUserDao.selectById(id);
        if (user != null) {
            return CommonResult.success(user);
        } else {
            return CommonResult.fail("User not found");
        }
    }



    @PostMapping("/add")
    public CommonResult addUser(@RequestBody User user) {
        // 使用 MyBatis Plus 的 insert 方法添加用户
        int count = iUserDao.insert(user);
        if (count > 0) {
            return CommonResult.success(user.getId());
        } else {
            return CommonResult.fail();
        }
    }

    @PutMapping("/edit/{id}")
    public CommonResult editUser(@PathVariable int id, @RequestBody User user) {
        user.setId(id);  // 设置用户 ID
        // 使用 MyBatis Plus 的 updateById 方法更新用户
        int count = iUserDao.updateById(user);
        if (count > 0) {
            return CommonResult.success(count);
        } else {
            return CommonResult.fail();
        }
    }

    @PutMapping("/isdel/{id}")
    public CommonResult softDeleteUser(@PathVariable int id) {
        User user = new User();
        user.setId(id);
        user.setIsDel(1);  // 设置 isDel 为 1 表示逻辑删除

        int count = iUserDao.updateById(user);
        if (count > 0) {
            return CommonResult.success(count);
        } else {
            return CommonResult.fail();
        }
    }

    @DeleteMapping("/del/{id}")
    public CommonResult delUser(@PathVariable int id) {
        // 使用 MyBatis Plus 的 deleteById 方法删除用户
        int count = iUserDao.deleteById(id);
        if (count > 0) {
            return CommonResult.success(count);
        } else {
            return CommonResult.fail();
        }
    }

    @GetMapping("/search")
    public CommonResult searchUser(@RequestParam String keyword) {
        // 使用 MyBatis Plus 的条件查询 wrapper 模糊搜索用户名或 ID
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("user_name", keyword)
                .or().like("real_name", keyword)
                .or().like("phone", keyword);
        List<User> users = iUserDao.selectList(wrapper);
        return CommonResult.success(users);
    }

    @GetMapping("/all")
    public CommonResult getUsers(
            @RequestParam(required = false) Integer page,
            @RequestParam(required = false) Integer size) {
        // 查询条件：未删除的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("is_del", 0)   // 只查询未删除的用户
                .in("role_id", 1, 2)   // 筛选 role_id 为 1 或 2 的用户
                .orderByDesc("role_id") // 根据 role_id 倒序排列
                .orderByDesc("id");    // 根据 id 倒序排列
        List<User> user = iUserDao.selectList(wrapper);

        if (page != null && size != null) {
            // 如果提供了分页参数，则进行分页查询
            IPage<User> userPage = new Page<>(page, size);
            IPage<User> resultPage = iUserDao.selectPage(userPage, wrapper);

            // 返回分页结果，包括数据和总记录数
            return CommonResult.success(resultPage.getRecords(), user.size());
        } else {
            // 如果没有分页参数，则查询全部用户
            List<User> list = iUserDao.selectList(wrapper);
            // 返回全部用户列表
            return CommonResult.success(list, user.size());
        }
    }



//
//    @GetMapping("/all")
//    public CommonResult getIUser() {
//        // 使用 MyBatis Plus 的 selectList 方法获取所有用户
//        QueryWrapper<User> wrapper = new QueryWrapper<>();
//        wrapper.eq("is_del", 0);  // 只查询未删除的用户
//        wrapper.in("role_id", 1, 2); // 筛选 role_id 为 1 或 2 的用户
//        wrapper.orderByDesc("role_id");
//        wrapper.orderByDesc("id");   // 倒序排列
//
//        List<User> list = iUserDao.selectList(wrapper);
//        return CommonResult.success(list);
//    }
//    @GetMapping("/paged")
//    public CommonResult getPagedUser(@RequestParam int page, @RequestParam int size) {
//        // 使用 MyBatis Plus 提供的分页查询
//        QueryWrapper<User> wrapper = new QueryWrapper<>();
//        wrapper.eq("is_del", 0);  // 查询未删除的用户
//
//        // 分页对象，传入当前页码和每页大小
//        IPage<User> userPage = new Page<>(page, size);
//
//        // 执行分页查询
//        IPage<User> resultPage = iUserDao.selectPage(userPage, wrapper);
//
//        // 返回结果，包括分页数据和总记录数
//        return CommonResult.success(resultPage.getRecords(), (int) resultPage.getTotal());
//    }


}
